package jmm.threadPool.completionService;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.*;
import java.util.stream.Collectors;

public class CompletionServiceDemo3 {

    public static void main(String[] args) throws ExecutionException, InterruptedException {

        // 创建线程池
        ExecutorService executor =
                Executors.newFixedThreadPool(3);


        List<String> taskList = new ArrayList(5);
        taskList.add("w");
        taskList.add("s");
        taskList.add("C");

        //A:指定泛型类型
        List<Callable<String>> callables = taskList.stream()
                // map(Function f) 接收一个函数作为参数，该函数会被应用到每个元素上，并将其映射成一个新的元素。
                .map(str->(Callable<String>)()->{ //B:这个也要指定泛型类型
            System.out.println(str);
            return "new HashMap<>()";
        }).collect(Collectors.toList());


        //A:不指定类型的话
        List callables2 = taskList.stream()
                // map(Function f) 接收一个函数作为参数，该函数会被应用到每个元素上，并将其映射成一个新的元素。
                .map(str->(Callable)()->{ //B: Callable 也不需要指定泛型类型
                    System.out.println(str);
                    return "new HashMap<>()";
                }).collect(Collectors.toList());



        List<Future<String>> futures = executor.invokeAll(callables);
        for (Future<String> future : futures) {
            String s = future.get();
            System.out.println(s);
        }
    }
}
